package com.channel.temperature.collect.ui.viewmodel

import android.util.Log
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.viewModelScope
import com.github.mikephil.charting.data.Entry
import com.google.gson.Gson
import com.hjq.toast.ToastUtils
import com.hjy.bluetooth.HBluetooth
import com.hjy.bluetooth.exception.BluetoothException
import com.hjy.bluetooth.inter.SendCallBack
import com.hjy.bluetooth.operator.abstra.Sender
import com.channel.temperature.collect.app.ext.mmkv
import com.channel.temperature.collect.app.util.CRC16Utils
import com.channel.temperature.collect.app.util.MyUtil
import com.channel.temperature.collect.data.annotation.ValueKey
import com.channel.temperature.collect.data.response.LineDataBean
import com.channel.temperature.collect.data.response.OfflineBean
import com.channel.temperature.collect.data.response.SystemInfoBean
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import me.hgj.mvvmhelper.base.BaseViewModel
import java.util.Date


class OnlineCollectModel : BaseViewModel() {
    var clickType = 0
    var mLiveLineData: MutableLiveData<LineDataBean> = MutableLiveData<LineDataBean>()
    var index = 0
    var values1: ArrayList<Entry> = ArrayList<Entry>()
    var values2: ArrayList<Entry> = ArrayList<Entry>()
    var values3: ArrayList<Entry> = ArrayList<Entry>()
    var values4: ArrayList<Entry> = ArrayList<Entry>()
    var values5: ArrayList<Entry> = ArrayList<Entry>()
    var values6: ArrayList<Entry> = ArrayList<Entry>()
    var continueReadCMD = false
    var isClearDataAction = false
    var leftMaxValue = 200.0f
    var rightMaxValue = 120.0f
    var leftMinValue = -25.0f
    var rightMinValue = -10.0f

    var isFirstRead = true
    lateinit var readedSystemInfo: SystemInfoBean
    var startReadOnlineData: MutableLiveData<Boolean> = MutableLiveData<Boolean>()
    var currentDataString: MutableLiveData<String> = MutableLiveData<String>()

    var excelListData = ArrayList<OfflineBean>()
    fun sendCommonCMD(mSender: Sender, value: String) {
        viewModelScope.launch {
            var bufData = MyUtil.hex2Bytes(value)
            Log.e("sendCommonCMD", "sendCommonCMD  : " + MyUtil.bytes2Hex(bufData))
            sendCmdWithOutTime(bufData)
        }
    }

    fun sendCmdWithOutTime(bufData: ByteArray) {
        HBluetooth.getInstance().sender().send(bufData, object : SendCallBack {
            override fun onSending(command: ByteArray) {
//                    addMessage("命令发送中... " + MyUtil.bytes2Hex(command))
            }

            override fun onSendFailure(bleException: BluetoothException) {
                Log.e("onSendFailure", "onSendFailure " + bleException.message.toString())
            }
        })
//        viewModelScope.launch {
//            val conditionIsTrue = withTimeoutOrNull(3000L) {
//                repeat(3) { index ->
//                    if (clickType == -1) {
//                        Log.e(
//                            "sendCmdWithOutTime", "sendCmdWithOutTime 条件在第 $index 次检查时成立"
//                        )
//                        return@withTimeoutOrNull true
//                    }
//                    delay(1000L)
//                }
//                false
//            }
//            conditionIsTrue?.let { isTrue ->
//                Log.e(
//                    "sendCmdWithOutTime", "最终条件是: $isTrue"
//                )
//            } ?: run {
//                ToastUtils.show(appContext.resources.getString(R.string.out_time_tips))
//                Log.e(
//                    "sendCmdWithOutTime", "等待时间超时，未满足条件"
//                )
//            }
//        }
    }

    var packageDataLength: Int = 0
    var resultDataLength: Int = 0
    var needFoldData = false
    var dataResult: ByteArray = ByteArray(215)
    fun handleBLEResult(data: ByteArray) {
        Log.e("handleBLEResult", "handleBLEResult " + MyUtil.bytes2Hex(data))
        when (clickType) {
            //1:复位 2：关机 3：唤醒设备 4：进入休眠 5：校时 6：清空flash 7：读取存储数量 8:设备信息 9:读系统参数 10：写系统参数 14:读校准系数 15：发送任务名称 16：查询任务名称  17:一键设置发送任务名称
            //18：点击 发送任务 时查询当前连接设备的离线数据是已读还是未读
            //19 点击一键启动 时查询当前连接设备的离线数据是已读还是未读

            //先查系统参数的工作模式是不是3
            9 -> {
                viewModelScope.launch {
                    var hexResult = MyUtil.bytes2Hex(data.copyOfRange(0, 3))
                    if ("FF55AA" == hexResult) {
                        //9600波特率会分包，拆成64和一个50多的坑人
                        //460800波特率 每包数据最大就有490长度，就不会分包了
                        var dataHex = MyUtil.bytes2Hex(data)
                        var address = dataHex.substring(28, 30).toInt(16)
                        var outTime = dataHex.substring(30, 32).toInt(16)
                        outTime = 30
                        var intervalTime = dataHex.substring(32, 34).toInt(16)
                        var workMode = dataHex.substring(34, 36).toInt(16)
                        var onlineWorkTime = dataHex.substring(36, 40).toInt(16)
                        var onlineWorkInterval = dataHex.substring(40, 44).toInt(16)
                        var mSystemData = SystemInfoBean(
                            address,
                            outTime,
                            intervalTime,
                            workMode,
                            onlineWorkTime,
                            onlineWorkInterval
                        )
                        var json = Gson().toJson(mSystemData)
                        mmkv.putString(ValueKey.SYSTEM_INFO, json)
                        mmkv.putInt(ValueKey.DEVICE_ADDRESS, address)
                        readedSystemInfo = mSystemData

                        delay(300)

                        if (HBluetooth.getInstance().isConnected) {
                            HBluetooth.getInstance().sender()?.let { it1 ->
                                clickType = 14
                                delay(200)
                                var cmd = "FF55AA000A" + getAddress() + "450100001274004D"
                                sendCommonCMD(
                                    it1, cmd + CRC16Utils.checkCRC(MyUtil.hex2Bytes(cmd))
                                )
                            }
                        } else {
                            ToastUtils.show("请先连接设备后再操作")
                        }


                    }

                }
            }

            14 -> {
                Log.e("参数14", "参数14 ： " + MyUtil.bytes2Hex(data))
                viewModelScope.launch {

                    var hexResult = MyUtil.bytes2Hex(data.copyOfRange(0, 3))
                    if ("FF55AA" == hexResult) {
                        packageDataLength = 0
                        resultDataLength = MyUtil.bytes2Hex(data.copyOfRange(3, 5)).toInt(16)
                        dataResult = ByteArray(resultDataLength + 5)
                        needFoldData = data.size < resultDataLength + 5
                    }
                    if (needFoldData) {
                        System.arraycopy(data, 0, dataResult, packageDataLength, data.size)
                        packageDataLength += data.size
                        needFoldData = packageDataLength != resultDataLength + 5
                        if (packageDataLength == resultDataLength + 5) {
                            var packageData = dataResult.copyOfRange(0, dataResult.size - 1)
                            var result = CRC16Utils.checkCRC(packageData)

                            if (result.toInt(16) == java.lang.Byte.toUnsignedInt(dataResult[dataResult.size - 1]) && CRC16Utils.CHECKSUM(
                                    dataResult.copyOfRange(14, 90)
                                ).toInt(16)
                                == java.lang.Byte.toUnsignedInt(
                                    dataResult[dataResult.size - 2]
                                )
                            ) {
                                handleResultByClickType14(dataResult)
                            } else {
                                ToastUtils.show("命令校验失败")
                                resetClickType()
                            }

                        }
                    } else {
                        var packageData = data.copyOfRange(0, data.size - 1)
                        var result = CRC16Utils.checkCRC(packageData)
                        if (result.toInt(16) == java.lang.Byte.toUnsignedInt(data[data.size - 1]) && CRC16Utils.CHECKSUM(
                                data.copyOfRange(14, 90)
                            ).toInt(16)
                            == java.lang.Byte.toUnsignedInt(
                                data[data.size - 2]
                            )
                        ) {
                            handleResultByClickType14(data)
                        } else {
                            resetClickType()
                            ToastUtils.show("命令校验失败")
                        }
                    }

                }
            }
            //12:在线读取
            12 -> {
                var hexResult = MyUtil.bytes2Hex(data.copyOfRange(0, 3))
                if ("FF55AA" == hexResult) {
                    viewModelScope.launch {
                        var packageData = dataResult.copyOfRange(0, dataResult.size - 1)
                        var result = CRC16Utils.checkCRC(packageData)

                        if (result.toInt(16) == java.lang.Byte.toUnsignedInt(dataResult[dataResult.size - 1])) {
                            if (data.size == 82 || data.size == 74) {
                                var temperaturGX1 = data.copyOfRange(9, 11)
                                var temperatureGX2 = data.copyOfRange(11, 13)
                                var temperaturePT1 = data.copyOfRange(13, 17)
                                var temperaturePT2 = data.copyOfRange(17, 21)
                                var pressure1 = data.copyOfRange(21, 25)
                                var pressure2 = data.copyOfRange(25, 29)

                                var pressureElect1 = data.copyOfRange(53, 57)
                                var pressureElect2 = data.copyOfRange(57, 61)


                                //GX1温度值
                                var valueLeft1 =
                                    (MyUtil.bytes2Hex(temperaturGX1).toInt(16).toFloat()) / 100.0f
                                //GX2温度值
                                var valueLeft2 =
                                    (MyUtil.bytes2Hex(temperatureGX2).toInt(16).toFloat()) / 100.0f
                                //PT1温度值
                                var valueLeft3 = (MyUtil.bytes2Float(temperaturePT1).toFloat())
                                //PT2温度值
                                var valueLeft4 = (MyUtil.bytes2Float(temperaturePT2).toFloat())


                                //压力1
                                var pressure1Value = (MyUtil.bytes2Float(pressure1).toFloat())
                                //压力2
                                var pressure2Value = (MyUtil.bytes2Float(pressure2).toFloat())


                                //压力电压1
                                var pressureElect1Value =
                                    (MyUtil.bytes2Float(pressureElect1).toFloat())
                                //压力电压2
                                var pressureElect2Value =
                                    (MyUtil.bytes2Float(pressureElect2).toFloat())


                                var temperatureRatio1 = ValueKey.temperatureRatioDefault
                                var adcRatio1 = ValueKey.adcRatioDefault
                                var constant1 = ValueKey.constantDefault
                                var temperatureRatio2 = ValueKey.temperatureRatioDefault
                                var adcRatio2 = ValueKey.adcRatioDefault
                                var constant2 = ValueKey.constantDefault
//                            if (!mmkv.getString(ValueKey.RATIO_KEY, "").isNullOrEmpty()) {
//                                var dataRatio =
//                                    MyUtil.hex2Bytes(mmkv.getString(ValueKey.RATIO_KEY, ""))
//                                if ((constant1 - MyUtil.bytes2Double(
//                                        dataRatio.copyOfRange(
//                                            16,
//                                            24
//                                        )
//                                    )).toInt() == 0
//                                ) {
//                                    temperatureRatio1 =
//                                        MyUtil.bytes2Double(dataRatio.copyOfRange(0, 8))
//                                    adcRatio1 = MyUtil.bytes2Double(dataRatio.copyOfRange(8, 16))
//                                    constant1 = MyUtil.bytes2Double(dataRatio.copyOfRange(16, 24))
//                                    temperatureRatio2 =
//                                        MyUtil.bytes2Double(dataRatio.copyOfRange(0, 8))
//                                    adcRatio2 = MyUtil.bytes2Double(dataRatio.copyOfRange(8, 16))
//                                    constant2 = MyUtil.bytes2Double(dataRatio.copyOfRange(16, 24))
//                                } else {
//                                    temperatureRatio1 =
//                                        MyUtil.bytes2Double(dataRatio.copyOfRange(24, 32))
//                                    adcRatio1 = MyUtil.bytes2Double(dataRatio.copyOfRange(32, 40))
//                                    constant1 = MyUtil.bytes2Double(dataRatio.copyOfRange(40, 48))
//                                    temperatureRatio2 =
//                                        MyUtil.bytes2Double(dataRatio.copyOfRange(24, 32))
//                                    adcRatio2 = MyUtil.bytes2Double(dataRatio.copyOfRange(32, 40))
//                                    constant2 = MyUtil.bytes2Double(dataRatio.copyOfRange(40, 48))
//                                }
//                                Log.e(
//                                    "缓存", "缓存 ： " + mmkv.getString(
//                                        ValueKey.RATIO_KEY, ""
//                                    ) + ", 系数数据列表大小： " + dataRatio.size
//                                )
//                            }
                                var valueRight2 =
                                    getPressureByPT1AndPressure2(valueLeft3, pressure2Value)

////                            备注：压力计算公式 压力 =温度*温度系数+压力ADC*ADC系数+常数项
//                            var valueRight1 =
//                                (valueLeft1 * temperatureRatio1 + pressureElect1Value * adcRatio1 + constant1) / 100f
//
//                            var valueRight2 =
//                                (valueLeft2 * temperatureRatio2 + pressureElect2Value * adcRatio2 + constant2) / 100f
//                            Log.e("测试", "最终计算的压力值 ：" + valueRight1 + " , " + valueRight2)

//                            var readedLeftMaxValue = mutableListOf<Float>(
//                                valueLeft2, valueLeft4
//                            ).max()
//                            leftMaxValue =
//                                if (leftMaxValue > readedLeftMaxValue) leftMaxValue else (readedLeftMaxValue.toInt() + 50).toFloat()
//                            var readedLeftMinValue = mutableListOf<Float>(
//                                valueLeft2, valueLeft4
//                            ).min()
//                            leftMinValue =
//                                if (leftMinValue < readedLeftMinValue) leftMinValue else (readedLeftMinValue.toInt() - 30).toFloat()

//                            var readedRightMaxValue = mutableListOf<Float>(
//                                valueRight1.toFloat(),
//                                valueRight2.toFloat(),
//                            ).max()
//                            rightMaxValue =
//                                if (rightMaxValue > readedRightMaxValue) rightMaxValue else (readedRightMaxValue.toInt() + 50).toFloat()
//                            var readedRightMinValue = mutableListOf<Float>(
//                                valueRight1.toFloat(),
//                                valueRight2.toFloat(),
//                            ).min()
//                            rightMinValue =
//                                if (rightMinValue < readedRightMinValue) rightMinValue else (readedRightMinValue.toInt() - 50).toFloat()
//                            Log.e(
//                                "测试",
//                                "最大值最小值: " + leftMaxValue + " , " + leftMinValue + " , " + rightMaxValue + " , " + rightMinValue
//                            )
//                            Log.e(
//                                "测试formatFloat",
//                                "环境压力  " + MyUtil.formatFloat(valueRight2, 3, 0.000f)
//                            )
                                var decString = "板载温度:${
                                    MyUtil.formatFloat(valueLeft2, 2, 0.00f)
                                }℃" + "\n" + "环境温度:${
                                    MyUtil.formatFloat(valueLeft4, 3, 0.000f)
                                }℃" + "\n" + "环境压力:${
                                    MyUtil.formatFloat(valueRight2, 3, 0.000f)
                                }mpa"
                                currentDataString.value = "板载温度:${
                                    MyUtil.formatFloat(valueLeft2, 2, 0.00f)
                                }℃" + "," + "环境温度:${
                                    MyUtil.formatFloat(valueLeft4, 3, 0.000f)
                                }℃" + "," + "环境压力:${
                                    MyUtil.formatFloat(valueRight2, 3, 0.000f)
                                }mpa"

//                            values1.add(
//                                Entry(
//                                    index.toFloat(), valueLeft1, decString
//                                )
//                            )
                                values2.add(
                                    Entry(
                                        index.toFloat(), valueLeft2, decString
                                    )
                                )
//                            values3.add(
//                                Entry(
//                                    index.toFloat(), valueLeft3, decString
//                                )
//                            )
                                values4.add(
                                    Entry(
                                        index.toFloat(), valueLeft4, decString
                                    )
                                )
//                            values5.add(
//                                Entry(
//                                    index.toFloat(), valueRight1.toFloat(), decString
//                                )
//                            )
                                values6.add(
                                    Entry(
                                        index.toFloat(), valueRight2.toFloat(), decString
                                    )
                                )
                                index++
                                var mBean = mmkv.getString(ValueKey.CURRENT_TASK_NAME, "")?.let {
                                    OfflineBean(
                                        deviceName = "",
                                        deviceMac = "",
                                        dataResult = "",
                                        time = "${Date().time / 1000}&${
                                            mmkv.getString(
                                                ValueKey.CURRENT_DEVICE_NAME, ""
                                            )
                                        }",
                                        currentTaskName = it,
                                        gX2 = MyUtil.formatFloat(valueLeft2, 2, 0.00f).toFloat(),
                                        pT2 = MyUtil.formatFloat(valueLeft4, 2, 0.00f).toFloat(),
                                        pressure2 = MyUtil.formatFloat(valueRight2, 2, 0.00f)
                                            .toFloat()
                                    )
                                }
                                mBean?.let { excelListData.add(it) }

                                mLiveLineData.value = LineDataBean(
                                    values2 = values2,
                                    values4 = values4,
                                    values6 = values6,
                                )

                            }
                        }


                    }
                }


            }
        }
    }

    public fun handleResultByClickType14(data: ByteArray) {
        viewModelScope.launch {
            Log.e("组包后", "handleResultByClickType14  " + MyUtil.bytes2Hex(data))
            var result = CRC16Utils.checkCRC(data.copyOfRange(0, data.size - 1))
            if (MyUtil.bytes2Hex(data)
                    .contains("FF55AA") && result.toInt(16) == java.lang.Byte.toUnsignedInt(
                    data[data.size - 1]
                )
            ) {
                Log.e("参数14", "校验通过 ： ")
                var rationResult = MyUtil.bytes2Hex(data.copyOfRange(14, 90))
                Log.e("参数14", "参数14  ： " + rationResult)
                if (rationResult.contains("FFFFFF")) {
                    resetClickType()
                    ToastUtils.show("本设备未校准，请联系技术人员")
                } else {
                    mmkv.putString(ValueKey.RATIO_KEY, rationResult)
                    ToastUtils.show("读取压力计算参数成功")
                    clickType = 12
                    delay(300)
                    continueReadCMD = true
                    startReadOnlineData.value = true
                }

            } else {
                resetClickType()
                ToastUtils.show("参数校验未通过")
            }
        }

    }
//    public fun getPressureByPT1AndPressure2(pt1: Float, adc: Float): Float {
//
////        var pt1 = 29.990806579589844f
////        var adc = 22030.865234375f
////        Log.e("存储值", "参数 ：" + pt1 + "    " + adc)
//
//        var dataRatio = MyUtil.hex2Bytes(mmkv.getString(ValueKey.RATIO_KEY, ""))
//        var parameter1 = MyUtil.bytes2Double(dataRatio.copyOfRange(0, 8))
//        var parameter2 = MyUtil.bytes2Double(dataRatio.copyOfRange(8, 16))
//        var parameter3 = MyUtil.bytes2Double(dataRatio.copyOfRange(16, 24))
//        var parameter4 = MyUtil.bytes2Double(dataRatio.copyOfRange(24, 32))
//        var parameter5 = MyUtil.bytes2Double(dataRatio.copyOfRange(32, 40))
//        var parameter6 = MyUtil.bytes2Double(dataRatio.copyOfRange(40, 48))
//        var parameter7 = MyUtil.bytes2Double(dataRatio.copyOfRange(48, 56))
//        var parameter8 = MyUtil.bytes2Double(dataRatio.copyOfRange(56, 64))
//        var parameter9 = MyUtil.bytes2Double(dataRatio.copyOfRange(64, 72))
//        var parameter10 = MyUtil.bytes2Double(dataRatio.copyOfRange(72, 80))
//        var parameter11 = MyUtil.bytes2Double(dataRatio.copyOfRange(80, 88))
//        var parameter12 = MyUtil.bytes2Double(dataRatio.copyOfRange(88, 96))
//        var parameter13 = MyUtil.bytes2Double(dataRatio.copyOfRange(96, 104))
//        var parameter14 = MyUtil.bytes2Double(dataRatio.copyOfRange(104, 112))
//        var parameter15 = MyUtil.bytes2Double(dataRatio.copyOfRange(112, 120))
////        var parameter1 = 469.757
////        var parameter2 = 0.772
////        var parameter3 = 0.251
////        var parameter4 = 0.054
////        var parameter5 = 0
////        var parameter6 = 0
////        var parameter7 = -0.001
////        var parameter8 = 0
////        var parameter9 = 0
////        var parameter10 = 0
////        var parameter11 = 0
////        var parameter12 = 0
////        var parameter13 = 0
////        var parameter14 = 0
////        var parameter15 = 0
////        var y = parameter1 + parameter2 * pt1 + parameter3 * adc + parameter4 * Math.pow(
////            pt1.toDouble(), 2.0
////        ) + parameter5 * pt1 * adc + parameter6 * Math.pow(
////            adc.toDouble(), 2.0
////        ) + parameter7 * Math.pow(pt1.toDouble(), 3.0) + parameter8 * Math.pow(
////            pt1.toDouble(), 2.0
////        ) * adc + parameter9 * pt1 * Math.pow(
////            adc.toDouble(), 2.0
////        ) + parameter10 * Math.pow(pt1.toDouble(), 4.0) + parameter11 * Math.pow(
////            pt1.toDouble(), 3.0
////        ) * adc + parameter12 * Math.pow(pt1.toDouble(), 2.0) * Math.pow(
////            adc.toDouble(), 2.0
////        ) + parameter13 * Math.pow(pt1.toDouble(), 5.0) + parameter14 * Math.pow(
////            pt1.toDouble(), 4.0
////        ) * adc + parameter15 * Math.pow(pt1.toDouble(), 3.0) * Math.pow(adc.toDouble(), 2.0)
//
////        + parameter5 * pt1 * adc + parameter6 * Math.pow(
////            adc.toDouble(), 2.0
////        ) + parameter7 * Math.pow(pt1.toDouble(), 3.0) + parameter8 * Math.pow(
////            pt1.toDouble(), 2.0
////        ) * adc + parameter9 * pt1 * Math.pow(
////            adc.toDouble(), 2.0
////        ) + parameter10 * Math.pow(pt1.toDouble(), 4.0) + parameter11 * Math.pow(
////            pt1.toDouble(), 3.0
////        ) * adc + parameter12 * Math.pow(pt1.toDouble(), 2.0) * Math.pow(
////            adc.toDouble(), 2.0
////        ) + parameter13 * Math.pow(pt1.toDouble(), 5.0) + parameter14 * Math.pow(
////            pt1.toDouble(), 4.0
////        ) * adc + parameter15 * Math.pow(pt1.toDouble(), 3.0) * Math.pow(adc.toDouble(), 2.0)
////        Log.e("存储值", "结果 ：" + y.toFloat())
//
//        if (pt1 >= 50.0f) {
//            var y = (parameter1 + parameter2 * pt1 + parameter3 * adc + parameter4 * Math.pow(
//                pt1.toDouble(), 2.0
//            ) + parameter5 * pt1 * adc + parameter6 * Math.pow(
//                adc.toDouble(), 2.0
//            ) + parameter7 * Math.pow(pt1.toDouble(), 3.0) + parameter8 * Math.pow(
//                pt1.toDouble(), 2.0
//            ) * adc + parameter9 * pt1 * Math.pow(
//                adc.toDouble(), 2.0
//            ) + parameter10 * Math.pow(pt1.toDouble(), 4.0) + parameter11 * Math.pow(
//                pt1.toDouble(), 3.0
//            ) * adc + parameter12 * Math.pow(pt1.toDouble(), 2.0) * Math.pow(
//                adc.toDouble(), 2.0
//            ) + parameter13 * Math.pow(pt1.toDouble(), 5.0) + parameter14 * Math.pow(
//                pt1.toDouble(), 4.0
//            ) * adc + parameter15 * Math.pow(pt1.toDouble(), 3.0) * Math.pow(adc.toDouble(), 2.0))
//            var result =
//                5.811 + (-0.089 * pt1) + (-0.005 * y) + 0.001 * Math.pow(pt1.toDouble(), 2.0);
//            return ((y - result).toFloat()) / 100.0f
//        } else {
//            var y = (parameter1 + parameter2 * pt1 + parameter3 * adc + parameter4 * Math.pow(
//                pt1.toDouble(), 2.0
//            ) + parameter5 * pt1 * adc + parameter6 * Math.pow(
//                adc.toDouble(), 2.0
//            ) + parameter7 * Math.pow(pt1.toDouble(), 3.0) + parameter8 * Math.pow(
//                pt1.toDouble(), 2.0
//            ) * adc + parameter9 * pt1 * Math.pow(
//                adc.toDouble(), 2.0
//            ) + parameter10 * Math.pow(pt1.toDouble(), 4.0) + parameter11 * Math.pow(
//                pt1.toDouble(), 3.0
//            ) * adc + parameter12 * Math.pow(pt1.toDouble(), 2.0) * Math.pow(
//                adc.toDouble(), 2.0
//            ) + parameter13 * Math.pow(pt1.toDouble(), 5.0) + parameter14 * Math.pow(
//                pt1.toDouble(), 4.0
//            ) * adc + parameter15 * Math.pow(pt1.toDouble(), 3.0) * Math.pow(
//                adc.toDouble(), 2.0
//            )) / 100.0f
//            return y.toFloat()
//        }
//
//    }


    public fun getPressureByPT1AndPressure2(pt1: Float, adc: Float): Float {

//        var pt1 = 29.990806579589844f
//        var adc = 22030.865234375f
//        Log.e("存储值", "参数 ：" + pt1 + "    " + adc)

        var dataRatio = MyUtil.hex2Bytes(mmkv.getString(ValueKey.RATIO_KEY, ""))
        Log.e("系数值", "getPressureByPT1AndPressure2   " + MyUtil.bytes2Hex(dataRatio))
        var parameter1 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(0, 4)).toFloat()
        var parameter2 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(4, 8)).toDouble()
        var parameter3 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(8, 12)).toDouble()
        var parameter4 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(12, 16)).toFloat()
        var parameter5 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(16, 20)).toFloat()
        var parameter6 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(20, 24)).toFloat()
        var parameter7 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(24, 28)).toFloat()
        var parameter8 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(28, 32)).toFloat()
        var parameter9 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(32, 36)).toFloat()
        var parameter10 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(36, 40)).toFloat()
        var parameter11 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(40, 44)).toFloat()
        var parameter12 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(44, 48)).toFloat()
        var parameter13 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(48, 52)).toFloat()
        var parameter14 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(52, 56)).toFloat()
        var parameter15 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(56, 60)).toFloat()
        var parameter16 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(60, 64)).toFloat()
        var parameter17 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(64, 68)).toFloat()
        var parameter18 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(68, 72)).toFloat()
        var parameter19 = MyUtil.bytes2FloatOther(dataRatio.copyOfRange(72, 76)).toFloat()
//        var parameter1 = 469.757
//        var parameter2 = 0.772
//        var parameter3 = 0.251
//        var parameter4 = 0.054
//        var parameter5 = 0
//        var parameter6 = 0
//        var parameter7 = -0.001
//        var parameter8 = 0
//        var parameter9 = 0
//        var parameter10 = 0
//        var parameter11 = 0
//        var parameter12 = 0
//        var parameter13 = 0
//        var parameter14 = 0
//        var parameter15 = 0
//        var y = parameter1 + parameter2 * pt1 + parameter3 * adc + parameter4 * Math.pow(
//            pt1.toDouble(), 2.0
//        ) + parameter5 * pt1 * adc + parameter6 * Math.pow(
//            adc.toDouble(), 2.0
//        ) + parameter7 * Math.pow(pt1.toDouble(), 3.0) + parameter8 * Math.pow(
//            pt1.toDouble(), 2.0
//        ) * adc + parameter9 * pt1 * Math.pow(
//            adc.toDouble(), 2.0
//        ) + parameter10 * Math.pow(pt1.toDouble(), 4.0) + parameter11 * Math.pow(
//            pt1.toDouble(), 3.0
//        ) * adc + parameter12 * Math.pow(pt1.toDouble(), 2.0) * Math.pow(
//            adc.toDouble(), 2.0
//        ) + parameter13 * Math.pow(pt1.toDouble(), 5.0) + parameter14 * Math.pow(
//            pt1.toDouble(), 4.0
//        ) * adc + parameter15 * Math.pow(pt1.toDouble(), 3.0) * Math.pow(adc.toDouble(), 2.0)

//        + parameter5 * pt1 * adc + parameter6 * Math.pow(
//            adc.toDouble(), 2.0
//        ) + parameter7 * Math.pow(pt1.toDouble(), 3.0) + parameter8 * Math.pow(
//            pt1.toDouble(), 2.0
//        ) * adc + parameter9 * pt1 * Math.pow(
//            adc.toDouble(), 2.0
//        ) + parameter10 * Math.pow(pt1.toDouble(), 4.0) + parameter11 * Math.pow(
//            pt1.toDouble(), 3.0
//        ) * adc + parameter12 * Math.pow(pt1.toDouble(), 2.0) * Math.pow(
//            adc.toDouble(), 2.0
//        ) + parameter13 * Math.pow(pt1.toDouble(), 5.0) + parameter14 * Math.pow(
//            pt1.toDouble(), 4.0
//        ) * adc + parameter15 * Math.pow(pt1.toDouble(), 3.0) * Math.pow(adc.toDouble(), 2.0)
//        Log.e("存储值", "结果 ：" + y.toFloat())

        if (pt1 >= 50.0f) {
            var y = (parameter1 + parameter2 * pt1 + parameter3 * adc + parameter4 * Math.pow(
                pt1.toDouble(), 2.0
            ) + parameter5 * pt1 * adc + parameter6 * Math.pow(
                adc.toDouble(), 2.0
            ) + parameter7 * Math.pow(pt1.toDouble(), 3.0) + parameter8 * Math.pow(
                pt1.toDouble(), 2.0
            ) * adc + parameter9 * pt1 * Math.pow(
                adc.toDouble(), 2.0
            ) + parameter10 * Math.pow(pt1.toDouble(), 4.0) + parameter11 * Math.pow(
                pt1.toDouble(), 3.0
            ) * adc + parameter12 * Math.pow(pt1.toDouble(), 2.0) * Math.pow(
                adc.toDouble(), 2.0
            ) + parameter13 * Math.pow(pt1.toDouble(), 5.0) + parameter14 * Math.pow(
                pt1.toDouble(), 4.0
            ) * adc + parameter15 * Math.pow(pt1.toDouble(), 3.0) * Math.pow(adc.toDouble(), 2.0))
            var result =
                parameter16 + (parameter17 * pt1) + (parameter18 * y) + parameter19 * Math.pow(
                    pt1.toDouble(), 2.0
                );
            return ((y - result).toFloat()) / 100.0f
        } else {
            var y = (parameter1 + parameter2 * pt1 + parameter3 * adc + parameter4 * Math.pow(
                pt1.toDouble(), 2.0
            ) + parameter5 * pt1 * adc + parameter6 * Math.pow(
                adc.toDouble(), 2.0
            ) + parameter7 * Math.pow(pt1.toDouble(), 3.0) + parameter8 * Math.pow(
                pt1.toDouble(), 2.0
            ) * adc + parameter9 * pt1 * Math.pow(
                adc.toDouble(), 2.0
            ) + parameter10 * Math.pow(pt1.toDouble(), 4.0) + parameter11 * Math.pow(
                pt1.toDouble(), 3.0
            ) * adc + parameter12 * Math.pow(pt1.toDouble(), 2.0) * Math.pow(
                adc.toDouble(), 2.0
            ) + parameter13 * Math.pow(pt1.toDouble(), 5.0) + parameter14 * Math.pow(
                pt1.toDouble(), 4.0
            ) * adc + parameter15 * Math.pow(pt1.toDouble(), 3.0) * Math.pow(
                adc.toDouble(), 2.0
            )) / 100.0f
            return y.toFloat()
        }

    }


    fun clearAllData() {
        index = 0
        values1.clear()
        values2.clear()
        values3.clear()
        values4.clear()
        values5.clear()
        values6.clear()
        values1 = ArrayList<Entry>()
        values2 = ArrayList<Entry>()
        values3 = ArrayList<Entry>()
        values4 = ArrayList<Entry>()
        values5 = ArrayList<Entry>()
        values6 = ArrayList<Entry>()
        mLiveLineData.value = LineDataBean(
            values2 = values2,
            values4 = values4,
            values6 = values6,
        )
        excelListData.clear()
    }

    private fun getAddress(): String {
        return "FA"
    }

    public fun resetClickType() {
        clickType = -1
    }
}


